package com.weilx959.spt.core.component;

import com.weilx959.spt.core.utils.Try;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.StringProperty;
import javafx.scene.Node;

public interface FormItemControl<T> {

    String getLabel();

    StringProperty labelProperty();

    void setLabel(String label);

    String getKey();

    void setKey(String key);

    T getValue();

    ObjectProperty<T> valueProperty();

    void setValue(T value);

    /**
     * 验证输入是否合法
     *
     * @return true 合法，false 非法
     */
    Try<String> validate();

    /**
     * 是否被修改
     *
     * @return true 修改，false 未修改
     */
    boolean isModified();

    /**
     * 重置控件值
     */
    void reset();

    /**
     * 提交控件值
     */
    void submit();

    Node getControl();

    String serialize(T value);

    T deserialize(String value);

    int getColspan();

    int getRowspan();
}
